package application.employee.api;


import application.employee.model.Employee;

import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import java.util.Collection;

/**
 * 雇员  业务层接口
 *
 * @author roamer
 * @version V1.0
 * @date 2019-02-24 13:41
 */
@Path("/employees")
public interface EmployeeServiceInterface {

    /**
     * 添加雇员
     *
     * @param employee 雇员信息
     *
     * @return {@code Employee}持久化后的雇员信息
     */
    @POST
    @Path("/")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    Employee addEmployee(Employee employee);

    /**
     * 获取雇员列表
     *
     * @return {@code Collection<Employee>} 雇员列表
     */
    @GET
    @Path("/")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    Collection<Employee> getEmployees();

    /**
     * 获取雇员
     *
     * @param id 雇员ID
     *
     * @return {@code Employee} 雇员信息
     */
    @GET
    @Path("/{id}")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    Employee getEmployee(@PathParam("id") String id);


    /**
     * 修改雇员信息
     *
     * @param id       雇员ID
     * @param employee 雇员信息
     *
     * @return {@code Employee} 雇员信息
     */
    @PUT
    @Path("/{id}")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    Employee updateEmployee(@PathParam("id") String id, Employee employee);


    /**
     * 修改雇员详细信息
     *
     * @param id       雇员ID
     * @param employee 雇员信息
     *
     * @return {@code Employee} 雇员信息
     */
    @PUT
    @Path("/{id}/detail")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    Employee updateEmployeeDetail(@PathParam("id") String id, Employee employee);

    /**
     * 获取雇员列表
     *
     * @param name 雇员名称
     *
     * @return {@code Collection<Employee>} 雇员列表
     */
    Collection<Employee> findEmployeesByName(String name);

    /**
     * 删除雇员信息
     *
     * @param id 雇员ID
     *
     * @return {@code Employee} 雇员信息
     */
    @DELETE
    @Path("/{id}")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    Employee deleteEmployee(@PathParam("id") String id);
}
